4 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
-index 462953e..da6f9e2 100644
+index 5494c61..f3c3568 100644
--- a/testsuite/gsk/compare-render.c
+++ b/testsuite/gsk/compare-render.c
-@@ -232,11 +232,19 @@ main (int argc, char **argv)
+@@ -234,11 +234,19 @@ main (int argc, char **argv)
}
else
{
cairo_surface_destroy (diff_surface);
success = FALSE;
diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
-index 7e2be7e..6ef17aa 100644
+index efe48e6..947eb2a 100644
--- a/testsuite/reftests/gtk-reftest.c
+++ b/testsuite/reftests/gtk-reftest.c
-@@ -296,6 +296,9 @@ test_ui_file (GFile *file)
+@@ -298,6 +298,9 @@ test_ui_file (GFile *file)
char *ui_file, *reference_file;
cairo_surface_t *ui_image, *reference_image, *diff_image;
GtkStyleProvider *provider;
ui_file = g_file_get_path (file);
-@@ -315,12 +318,16 @@ test_ui_file (GFile *file)
+@@ -317,12 +320,16 @@ test_ui_file (GFile *file)
}
g_free (reference_file);
+ g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels",
+ pixels_changed, pixels, max_diff);
save_image (diff_image, ui_file, ".diff.png");
+ cairo_surface_destroy (diff_image);
g_test_fail ();
- }
diff --git a/testsuite/reftests/reftest-compare.c b/testsuite/reftests/reftest-compare.c
-index 34285ac..274fd52 100644
+index 5c682e1..9db00ab 100644
--- a/testsuite/reftests/reftest-compare.c
+++ b/testsuite/reftests/reftest-compare.c
@@ -83,12 +83,16 @@ buffer_diff_core (const guchar *buf_a,
3 files changed, 62 insertions(+), 3 deletions(-)
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
-index da6f9e2..daea8a1 100644
+index f3c3568..6766a01 100644
--- a/testsuite/gsk/compare-render.c
+++ b/testsuite/gsk/compare-render.c
@@ -98,6 +98,12 @@ get_output_file (const char *file,
static void
save_image (cairo_surface_t *surface,
const char *test_name,
-@@ -242,12 +248,35 @@ main (int argc, char **argv)
+@@ -244,12 +250,35 @@ main (int argc, char **argv)
if (diff_surface)
{
}
diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
-index 6ef17aa..3ef6d32 100644
+index 947eb2a..76b184d 100644
--- a/testsuite/reftests/gtk-reftest.c
+++ b/testsuite/reftests/gtk-reftest.c
-@@ -290,6 +290,12 @@ save_image (cairo_surface_t *surface,
+@@ -292,6 +292,12 @@ save_image (cairo_surface_t *surface,
g_free (filename);
}
static void
test_ui_file (GFile *file)
{
-@@ -326,10 +332,34 @@ test_ui_file (GFile *file)
+@@ -328,11 +334,35 @@ test_ui_file (GFile *file)
if (diff_image)
{
pixels_changed, pixels, max_diff);
+
save_image (diff_image, ui_file, ".diff.png");
+ cairo_surface_destroy (diff_image);
- g_test_fail ();
+
+ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels)
+++ /dev/null
-From: Simon McVittie <smcv@debian.org>
-Date: Sat, 13 Feb 2021 18:21:25 +0000
-Subject: reftests: Share reftest-compare.[ch] between GSK and GTK tests
-
-The only non-whitespace difference is that the copy in GSK does not
-set the symbol's visibility.
-
-Signed-off-by: Simon McVittie <smcv@debian.org>
-Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3203
----
- testsuite/gsk/compare-render.c | 2 +-
- testsuite/gsk/meson.build | 2 +-
- testsuite/gsk/reftest-compare.c | 173 ----------------------------------------
- testsuite/gsk/reftest-compare.h | 30 -------
- 4 files changed, 2 insertions(+), 205 deletions(-)
- delete mode 100644 testsuite/gsk/reftest-compare.c
- delete mode 100644 testsuite/gsk/reftest-compare.h
-
-diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
-index 562a82e..462953e 100644
---- a/testsuite/gsk/compare-render.c
-+++ b/testsuite/gsk/compare-render.c
-@@ -2,7 +2,7 @@
- #include <glib/gstdio.h>
- #include <gtk/gtk.h>
- #include <stdlib.h>
--#include "reftest-compare.h"
-+#include "../reftests/reftest-compare.h"
-
- static char *arg_output_dir = NULL;
-
-diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build
-index c23d371..c53bf1f 100644
---- a/testsuite/gsk/meson.build
-+++ b/testsuite/gsk/meson.build
-@@ -3,7 +3,7 @@ testdatadir = join_paths(installed_test_datadir, 'gsk')
-
- compare_render = executable(
- 'compare-render',
-- ['compare-render.c', 'reftest-compare.c'],
-+ ['compare-render.c', '../reftests/reftest-compare.c'],
- dependencies: libgtk_dep,
- c_args: common_cflags,
- install: get_option('install-tests'),
-diff --git a/testsuite/gsk/reftest-compare.c b/testsuite/gsk/reftest-compare.c
-deleted file mode 100644
-index 6cb8af7..0000000
---- a/testsuite/gsk/reftest-compare.c
-+++ /dev/null
-@@ -1,173 +0,0 @@
--/*
-- * Copyright (C) 2011 Red Hat Inc.
-- *
-- * Author:
-- * Benjamin Otte <otte@gnome.org>
-- *
-- * This library is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU Library General Public
-- * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-- *
-- * This library is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- * Library General Public License for more details.
-- *
-- * You should have received a copy of the GNU Library General Public
-- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
-- */
--
--#include "config.h"
--
--#include "reftest-compare.h"
--
--static void
--get_surface_size (cairo_surface_t *surface,
-- int *width,
-- int *height)
--{
-- cairo_t *cr;
-- double x1, x2, y1, y2;
--
-- cr = cairo_create (surface);
-- cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
-- cairo_destroy (cr);
--
-- g_assert (x1 == 0 && y1 == 0);
-- g_assert (x2 > 0 && y2 > 0);
-- g_assert ((int) x2 == x2 && (int) y2 == y2);
--
-- *width = x2;
-- *height = y2;
--}
--
--static cairo_surface_t *
--coerce_surface_for_comparison (cairo_surface_t *surface,
-- int width,
-- int height)
--{
-- cairo_surface_t *coerced;
-- cairo_t *cr;
--
-- coerced = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-- width,
-- height);
-- cr = cairo_create (coerced);
--
-- cairo_set_source_surface (cr, surface, 0, 0);
-- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-- cairo_paint (cr);
--
-- cairo_destroy (cr);
--
-- g_assert (cairo_surface_status (coerced) == CAIRO_STATUS_SUCCESS);
--
-- return coerced;
--}
--
--/* Compares two CAIRO_FORMAT_ARGB32 buffers, returning NULL if the
-- * buffers are equal or a surface containing a diff between the two
-- * surfaces.
-- *
-- * This function should be rewritten to compare all formats supported by
-- * cairo_format_t instead of taking a mask as a parameter.
-- *
-- * This function is originally from cairo:test/buffer-diff.c.
-- * Copyright © 2004 Richard D. Worth
-- */
--static cairo_surface_t *
--buffer_diff_core (const guchar *buf_a,
-- int stride_a,
-- const guchar *buf_b,
-- int stride_b,
-- int width,
-- int height)
--{
-- int x, y;
-- guchar *buf_diff = NULL;
-- int stride_diff = 0;
-- cairo_surface_t *diff = NULL;
--
-- for (y = 0; y < height; y++)
-- {
-- const guint32 *row_a = (const guint32 *) (buf_a + y * stride_a);
-- const guint32 *row_b = (const guint32 *) (buf_b + y * stride_b);
-- guint32 *row = (guint32 *) (buf_diff + y * stride_diff);
--
-- for (x = 0; x < width; x++)
-- {
-- int channel;
-- guint32 diff_pixel = 0;
--
-- /* check if the pixels are the same */
-- if (row_a[x] == row_b[x])
-- continue;
--
-- if (diff == NULL)
-- {
-- diff = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
-- width,
-- height);
-- g_assert (cairo_surface_status (diff) == CAIRO_STATUS_SUCCESS);
-- buf_diff = cairo_image_surface_get_data (diff);
-- stride_diff = cairo_image_surface_get_stride (diff);
-- row = (guint32 *) (buf_diff + y * stride_diff);
-- }
--
-- /* calculate a difference value for all 4 channels */
-- for (channel = 0; channel < 4; channel++)
-- {
-- int value_a = (row_a[x] >> (channel*8)) & 0xff;
-- int value_b = (row_b[x] >> (channel*8)) & 0xff;
-- guint channel_diff;
--
-- channel_diff = ABS (value_a - value_b);
-- channel_diff *= 4; /* emphasize */
-- if (channel_diff)
-- channel_diff += 128; /* make sure it's visible */
-- if (channel_diff > 255)
-- channel_diff = 255;
-- diff_pixel |= channel_diff << (channel*8);
-- }
--
-- if ((diff_pixel & 0x00ffffff) == 0)
-- {
-- /* alpha only difference, convert to luminance */
-- guint8 alpha = diff_pixel >> 24;
-- diff_pixel = alpha * 0x010101;
-- }
--
-- row[x] = diff_pixel;
-- }
-- }
--
-- return diff;
--}
--
--cairo_surface_t *
--reftest_compare_surfaces (cairo_surface_t *surface1,
-- cairo_surface_t *surface2)
--{
-- int w1, h1, w2, h2, w, h;
-- cairo_surface_t *coerced1, *coerced2, *diff;
--
-- get_surface_size (surface1, &w1, &h1);
-- get_surface_size (surface2, &w2, &h2);
-- w = MAX (w1, w2);
-- h = MAX (h1, h2);
-- coerced1 = coerce_surface_for_comparison (surface1, w, h);
-- coerced2 = coerce_surface_for_comparison (surface2, w, h);
--
-- diff = buffer_diff_core (cairo_image_surface_get_data (coerced1),
-- cairo_image_surface_get_stride (coerced1),
-- cairo_image_surface_get_data (coerced2),
-- cairo_image_surface_get_stride (coerced2),
-- w, h);
--
-- cairo_surface_destroy (coerced1);
-- cairo_surface_destroy (coerced2);
--
-- return diff;
--}
--
-diff --git a/testsuite/gsk/reftest-compare.h b/testsuite/gsk/reftest-compare.h
-deleted file mode 100644
-index b889e16..0000000
---- a/testsuite/gsk/reftest-compare.h
-+++ /dev/null
-@@ -1,30 +0,0 @@
--/* GTK - The GIMP Toolkit
-- * Copyright (C) 2014 Red Hat, Inc.
-- *
-- * This library is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU Lesser General Public
-- * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-- *
-- * This library is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- * Lesser General Public License for more details.
-- *
-- * You should have received a copy of the GNU Lesser General Public
-- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
-- */
--
--#ifndef __REFTEST_COMPARE_H__
--#define __REFTEST_COMPARE_H__
--
--#include <gtk/gtk.h>
--
--G_BEGIN_DECLS
--
--cairo_surface_t * reftest_compare_surfaces (cairo_surface_t *surface1,
-- cairo_surface_t *surface2);
--
--G_END_DECLS
--
--#endif /* __REFTEST_COMPARE_H__ */